// Package coding_round_1 27-739
// @Title coding_round_1
// @Description
// @Author  == 琳琳也叫王木木 ==  2021/9/24 14:20
// @Create  2021/9/24 14:20
package coding_round_1

import "fmt"

func DailyTemperatures(temperatures []int) []int {
	ans := []int{}
	for i := 0; i < len(temperatures); i++ {
		haveResult := false // 标识，记录内层循环走完有没有遇到结果
		for j := i; j < len(temperatures); j++ {
			if temperatures[j] > temperatures[i] {
				ans = append(ans, j-i)
				haveResult = true
				break
			}
		}
		// 如果内层循环走完还没得结果，从当前天开始没有比自己温度高的天了，就用0代替
		if haveResult == false {
			ans = append(ans, 0)
		}
	}
	return ans
}

func DailyTemperatures2(temperatures []int) []int {
	ans := make([]int, len(temperatures)) // 最终结果集 默认初始化了都为0
	monotoneStack := []int{}              // 初始化一个单调递减的栈
	for i := 0; i < len(temperatures); i++ {
		// 如果栈为空，或者当前元素小于栈顶元素  把当前元素的下标直接加入到单调栈中
		if len(monotoneStack) < 1 || temperatures[i] <= temperatures[monotoneStack[len(monotoneStack)-1]] {
			monotoneStack = append(monotoneStack, i)
			fmt.Println(monotoneStack)
		} else {
			for len(monotoneStack) > 0 && temperatures[i] > temperatures[monotoneStack[len(monotoneStack)-1]] {
				topIndex := monotoneStack[len(monotoneStack)-1]
				monotoneStack = monotoneStack[:len(monotoneStack)-1] // 出栈
				fmt.Println(i, topIndex, monotoneStack)
				ans[topIndex] = i - topIndex
			}
		}
	}
	return ans
}
